#!/bin/bash

#Создание и прикладывание патчей. Личный опыт. (http://volgograd.lug.ru/wiki/TarasAblamsky/articles/DiffAndPatch)

#	Создание:
#1. разворачивам дерево исходников в рабочий каталог. Например /var/tmp/sources
#2. работаем с файлами, вносим изменения, отлаживаем
#3. удаляем резервные копии (find -name "*~" -exec rm -f {} \;)
#4. разворачиваем оригинальное дерево исходников в директорию рядом, Например /var/tmp/sources.orig
#5. делаем патч: cd /var/tmp; diff -k.orig -Naur sources > my-cool-feature.patch
#6. патч my-cool-feature.patch готов

#	Прикладывание:
#1. разворачивам дерево исходников в рабочий каталог. Например /var/tmp/sources
#2. копируем патч в каталог с исходниками (cp my-cool-feature.patch /var/tmp/sources/)
#3. прикладывам патч: cd /var/tmp/sources; patch -p1 -s < my-cool-feature.patch
#4. исходники пропатчены

################################
#$1 - source-dir, ИЗМЕНЕННОЕ
#$2 - Имя файла-патча
#$3 - суффикс оригинальных исходников, если не задан, то .orig

suff='.orig'
orig_dir=''

	if [ "$1" == "" ]
	then
	echo Не задана директория source, которую обрабатывать! Завершаю работу.
	exit 1
	else
		if [ "$2" == "" ]
		then
		echo "Не задано имя выходного файла-патча! Завершаю работу." 1>&2
		exit 2
		else
			if [ "$3" == "" ]
			then
				if [ ! -f $1$suff ] && [ ! -d $1$suff ]
				then
				echo Не задан суффикс директории-оригинала.
				echo "Директория(файл) поумолчанию - $1$suff тоже не найдена! Завершаю работу." 1>&2
				exit 3
				else
				orig_dir="$1$suff"
				fi
			else
				if [ -d "$1$3" ]
				then
				orig_dir="$1$3"
				else
					if [ -d "$3" -o -f "$3" ]
					then
					echo "'$3' задана директория(файл) а не суффикс, используем ее." 1>&2
					orig_dir="$3"
					else
					echo "Оригинальная директория не найдена. Завершаю работу." 1>&2
					exit 4
					fi
				fi
			fi
		fi
	fi

#diff -k$suff -Naur $1 > $2
#echo diff -NaurEbBH $addon_diff_options $orig_dir $1
#set -x
# Eval to allow in $addon_diff_options any options including arguments with spaces in quotes.
# see http://www.linuxquestions.org/questions/programming-9/bash-generating-a-string-containing-options-and-using-with-kdialog-648873/
# But -u do NOT overrided by -U<n> and uses 3 lines of context. Futhermore, second -U<n> also do not have any effect :(
eval diff ${DIFF_OPTIONS:-'-NurEbBH'} $addon_diff_options $orig_dir $1 > $2
